-128(byte)>>128 等于多少?(java题目)

来源:百度知道 编辑:UC知道 时间:2024/06/24 11:45:53
public class ex54{
public static void main(String[] args){
byte a=-128;
byte b=(byte)(a>>128);
System.out.print(b);
}
}
求b多少,为什么
要求有过程,最好用二进制表示
答得满意的加20分
我要的是a>>128的原理和过程,如果你的答案是-8那你就错了,不信你可以用C做一下
,之于a>>128的二进制过程,只不过128个1或0而已 ^_^!

>>是有符号右移位运算符,则将运算符左边的运算对象向右移动运算符右侧指定的位数,若值为正则在高位插入0,若值为负则在高位插入1。

值得注意的是:对于int型的移动位数,需要先模32再移。所以x>>128 = x>>0,也即并没有开始运算。

还是举个其他的例子说明吧,比如-128>>36
= -128>>4

-128: 1,0000000
右移4位: 1, 000(0000)
高位插1: 1,1111000(结果是补码)
反码: 1,1110111
原码: 1,0001000
结果为: -8

呵呵,有点白~不好意思。

同意楼上- -。。你的答案是128.。。我是学C#的可能不太一样。。。你的答案不知道对不。。。我懒点用INT转的。。。原理呢。。
-128: 1,0000000
右移4位: 1, 000(0000)
高位插1: 1,1111000(结果是补码)
反码: 1,1110111
原码: 1,0001000
结果为: -8
你要想好。。你要右移128位。。谢谢啊。。。这里可能打不下。。。了解?

我跑了一下,正确答案应该是-128是嘛?

我觉得思路是这样子的哦,不晓得对不:
1. byte的是8位的,而128是能除尽8的(128/8=16)
2. 所以a右移128就相当于不动(这是根据模的原理吧)
3. 所以a>>128还是等于-128

二进制的话,我想是这么算的。
a右移128位,就相当于右移16次的8位,而-128右移8位的结果应该还是-128:
-128 十进制
10000000 二进制